Einleitung

Im ersten Teil der Analyse konnte eine Übersicht über den Datensatz gewonnen werden. Im zweiten Teil wird nun untersucht, ob inkongruente Reize die Reaktionszeit signifikant beeinflussen. Hierzu werden Hypothesentest genutzt.

Die Null- und Gegenhypothese lauten:

H0: Die inkongruente Färbung der Buttons hat keine Auswirkung auf die Reaktionszeit.

H1: Die inkongruente Färbung der Buttons hat eine Auswirkung auf die Reaktionszeit.

Das Signifikanzniveau wird auf \(\alpha\) = 0.05 festgelegt.

Vorbereitung des Datensatzes

Im folgenden ist der Datensatz zu sehen ohne Probanden, die den Ishihara-Test nicht bestanden haben.

Um die Reaktionen den zugehörigen Zeitpunkten zuordnen zu können und die Reaktionen gruppieren zu können, wird die Tabelle zunächst vom weiten Format ins lange Format gebracht. Dabei werden die Spalten von “Datum” - “Ishihara Dauer” entfernt, da Informationen wie demographische Daten nicht gebraucht werden, um die Unterschiede zwischen den Reaktionen zu untersuchen. Das Ergebnis sieht wie folgt aus:

Die Spalte “Time_ms” wird als Boxplot geplottet, um die Verteilung der Reaktionszeiten zu veranschaulichen.

Der Boxplot ist stark gestaucht, da die Reaktionszeiten von 99 ms bis 56860 ms reichen. Der Median liegt bei 2029 ms, weshalb davon auszugehen ist, dass es sich bei den Außen- und Fernpunkten um Ausreißer handelt, von denen einige auch extreme Ausreißer sind. Für weitere Analysen sollten diese aussortiert werden.

Die Werte des Boxplots nochmal als Tabelle:

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     99    1643    2029    2351    2649   56860 

Um die Ausreißer zu identifizieren, wird das rstatix Paket verwendet.

Sichtbar sind insgesamt 628 Ausreißer von 10000 Messpunkten.

Von den 628 Ausreißern sind 224 Ausreißer extrem.Die extremen Ausreißer werden aus dem Datensatz entfernt.

Sodass noch 9776 Messpunkte von 10000 verbleiben. Nun ist auch der Boxplot erkennbar.

Und die Reaktionszeiten befinden sich jetzt zwischen 99 ms und 6136 ms.

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     99    1635    2009    2222    2587    6136 

Nun kann mit den Hypothesentests begonnen werden.

Anova-Test für alle

Zunächst wird sich ein Überblick der Mittelwerte und Standardabweichungen der einzelnen Reaktionen verschafft.

Hierbei ist zu sehen, dass sich die Mittelwerte zwischen den Reaktionen um mehrere 100 ms voneinander unterscheiden. Auch die zugehörigen Boxplots zeigen dies an:

Die Mediane bewegen sich von 1559 ms (Reaktion 5) zu 2143 ms (Reaktion 2). Nun ist zu prüfen, ob diese Unterschiede signifikant sind. Dafür wird der ANOVA-Test (Analysis of Variance Test) herangezogen. Dieser untersucht, ob bei einer Reihe von Messwerten, die in 2 oder mehr Gruppen eingeteilt sind, die Mittelwerte der Gruppen signifikat voneinander unterscheiden, sodass eine Aussage darüber getroffen werden kann, ob die einzelnen Gruppen eine Auswirkung auf die Messwerte haben.

Vorbedingungen prüfen

Um den ANOVA-Test durchführen zu können, müssen 2 Bedingungen erfüllt sein. Zum einen müssen die Daten normalverteilt sein und zum anderen müssen sie eine Varianzhomogenität aufweisen. Zuerst wird die Normalverteilung der Reaktionszeiten geprüft.

Prüfung auf Normalverteilung

Die Prüfung auf Normalverteilung wird sowohl visuell, als auch statistisch durchgeführt. Zuerst wird der Quantil-Quantil-Plot (Q-Q-Plot) betrachtet.

Die Winkelhalbierende stellt dabei die Standardnormalverteilung dar. Die schwarzen Punkte sind die Verteilung des Datensatzes. Je näher die Punkte an der Standardnormalverteilung sind, desto wahrscheinlicher ist eine Normalverteilung beim Datensatz.

Wird jede Reaktion einzeln geplottet, so ist ersichtlich, dass Reaktionen wie z.B. 4 und 7 näher an der Standardnormalverteilung sind, als andere Reaktionen.

Um die Normalverteilung statistisch zu prüfen, wird der Shapiro-Wilk-Test durchgeführt. R meldet beim Durchführen des Shapiro-Wilk-Tests einen Fehler, wenn auf die Normalverteilung aller Messwerte getestet wird, da nur zwischen 3 und 5000 Werte auf Normalität geprüft werden können.

Fehler in shapiro.test(data) : sample size must be between 3 and 5000

Daher wird der Shapiro-Wilk-Test nur auf die einzelnen Reaktionen angewandt, da diese Anzahlen von unter 5000 besitzen.

Angewandt auf die einzelenen Reaktionen gibt der Test an, dass lediglich Reaktion 7 normalverteilt ist. Dies ist bei 100 Probanden allerdings unwahrscheinlich. Grund für dieses Ergebnis ist die Empfindlichkeit des Shapiro-Wilk-Tests bei schon kleinen Abweichungen. Auch ist zu beachten, dass die Gruppen 1, 2, 3 und 8 jeweils über 2000 Messwerte besitzen, während die anderen Gruppen jeweils unter 150 Messwerte besitzen.

Eine andere Methode die Normalverteilung visuell zu prüfen, ist anhand eines Histogrammes. Die Balken sollten dabei möglichst eine gaußsche Glockenkurve bilden. Im folgenden Histogramm ist annährend eine solche Kurve zu sehen. Allerdings ist sie etwas nach links verschoben und die Anzahl der Messwerte unter 1000 ms sind abrupt sehr gering.

Im nächsten Histogramm sind nun alle Ausreißer, die von der identify-outliers-Methode erkannt worden sind, entfernt worden. Die Werte unter 1000 ms sind augenscheinlich nicht als Ausreißer erkannt worden. Der niedrigste gemessene Wert liegt bei 99 ms, welche nicht als Ausreißer erkannt wurde. Eine so schnelle Reaktion ist allerdings nicht möglich, weshalb die Person in diesem Moment möglicherweise versehentlich zweimal hintereinander auf den Button gedrückt hat, ohne vorher mental zu entscheiden, ob die Aufgabe richtig oder falsch gelöst worden ist.

Prüfung auf Varianzhomogenität

Die Prüfung der Varianzhomogenität erfolgt durch den Levene-Test.

Da der p-Wert kleiner als 0,05 ist, sind die Unterschiede in den Varianzen signikant. Daher ist der Levene-Test fehlgeschlagen und die zweite Bedingung für den Anova-Test nicht erfüllt. Ein fehlgeschlagener Levene-Test kann darauf hindeuten, dass bei den Messungen ein Fehler unterlaufen ist. In diesem Experiment ist das durch den Implementierungsfehler tatsächlich der Fall.

Welch-Anova-Test

Zwar ist die Varianzhomogenität für den Anova-Test nicht gegeben, allerdings lässt sich trotzdem noch untersuchen, wie signifikant die Unterschiede zwischen den Reaktionen sind. Das ist mit dem Welch-Anova-Test möglich, welche nur eine Normalverteilung fordert und robost gegenüber Varianzheterogenität ist. Dadurch hat er allerdings weniger Aussagekraft als der Anova-Test.

Der p-Wert für den Welch-Anova-Test ist kleiner als 0,05 und daher ist davon auszugehen, dass die Unterschiede zwischen den Reaktionen signifikant sind. D.h. dass die Nullhypothese verworfen wird und die Gegenhypothese angenommen wird.

Posthoc-Analyse

Da der Welch-Anova erfolgreich war, wird eine Posthoc-Analyse durchgeführt, um herauszufinden, wie signifikant die Unterschiede unter allen möglichen paarweisen Kombinationen von Reaktionen sind.

Wie in der Spalte “p.adj.signif” zu sehen ist, gibt es zwischen vielen Paaren signifikante Unterschiede. Je mehr Sterne dem Paar zugeordnert werden, desto höher ist die Signifikanz. “ns” dagegen bedeutet, dass der Unterschied zwischen dem Paar nicht signifikant ist.

Der paarweise Vergleich lässt sich auch visuell darstellen:

Die Linien über den Boxplots verbinden dabei die Reaktionen mit signifikanten Unterschieden. Die Sterne über den Linien zeigen auch die die Stärke der Signifkanz an.

Das Ergebnis des paarweisen Vergleichs ist etwas überraschend, da dieser die Hypothese, dass inkongruente Reize längere Reaktionszeiten verursachen doch wieder in Frage stellen. So ist beispielsweise zu sehen, dass es einen starken signifikanten Unterschied zwischen Reaktion 1 und 8 gibt, obwohl es sich hier zweimal um kongruente Reize handelt. Das inkongruente Gegenstück zur 8 ist die Reaktion 3. Zwischen 3 und 8 gibt es zwar auch einen starken Unterschied, allerdings hat die kongruente Reaktion eine höhere Durschnittsszeit als die inkongruente Reaktion.

Schlussfolgerung

Aufgrund der Ergebnisse kann sicher gesagt werden, dass die Farbe der Buttons auf jeden Fall eine Auswirkung auf die Reaktionszeit hat. Es ist jedoch nicht nachweisbar, dass dies an den inkongruenten Stimuli liegt.

Anova-Test für 100 richtige Antworten

Insgesamt 6 Probanden haben sowohl 100 Aufgaben richtig gelöst als auch den Ishihara-Test komplett bestanden. Da sie also keinen Fehler gemacht haben, können alle Reaktionen, die fälschlicherweise der 2 zugeordnert wurde (was eine falsche Reaktion auf eine Aufgabe ist) der 6 zugeordnet werden. Damit ist zwar ein kleiner, aber dafür korrekter Datensatz vorhanden, mit dem auch nochmal die Signifikanz zwischen den Reaktionen untersucht wird.

Die Daten der 6 Probanden wird auf diesselbe Weise vorbereitet, wie oben auch schon.

Damit sind 600 Messwerte vorhanden. Auch hier werden vor der Analyse die Ausreißer entfernt.

Insgesamt sind 32 Ausreißer vorhanden.

Aussortiert werden die 7 extremen Ausreißer.

Damit verbleiben noch 593 Messwerte.

Das zugehörige Boxplot zeigt die Verteilung der Messwerte an.

Die Tabelle zeigt die Ergebnisse wiederrum in Zahlen an.

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1171    1776    2206    2394    2784    5502 

Auffällig ist, dass der Median um 197 ms höher liegt, als bei der Gesamtgruppe.

Auch bei den Mittelwerten sind höhere Reaktionszeiten zu sehen.

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1171    1776    2206    2394    2784    5502 

Eine Normalverteilung ist gegeben.

Der Levene-Test ist erfolgreich, da p > 0,05 ist.

Daher wird der Anova-Test durchgeführt.

Coefficient covariances computed by hccm()
ANOVA Table (type II tests)

    Effect DFn DFd     F     p p<.05   ges
1 Reaction   3 589 4.248 0.006     * 0.021

Mit p < 0,05 ist der Anova-Test erfolgreich, daher bestehen signifikante Unterschiede zwischen den Gruppen.

Es folgt die Post-hoc Analyse, welche das Ergebnis von vorhin bestätigt: es bestehen signifikante Unterschiede zwsichen Reaktion 1 und 8 sowie zwischen Reaktion 3 und 8.

Dieses Ergebnis ist möglicherweise ein Hinweis darauf, dass der Aufbau des Experiments nicht geeignet ist, um herauszufinden, ob die Reaktionszeit durch inkongruenten Stimuli beeinflusst wird.

LS0tDQp0aXRsZTogIkF1c3dpcmt1bmdlbiBkZXMgU3Ryb29wLUVmZmVrdHMgYXVmIG1vYmlsZSBCZW51dHplcm9iZXJmbMOkY2hlbiINCnN1YnRpdGxlOiAiQW5hbHlzZSBUZWlsIDIgLSBTY2hsaWXDn2VuZGUgU3RhdGlzdGlrIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHRydWUNCi0tLQ0KDQojIEVpbmxlaXR1bmcNCg0KSW0gZXJzdGVuIFRlaWwgZGVyIEFuYWx5c2Uga29ubnRlIGVpbmUgw5xiZXJzaWNodCDDvGJlciBkZW4gRGF0ZW5zYXR6IGdld29ubmVuIHdlcmRlbi4gSW0gendlaXRlbiBUZWlsIHdpcmQgbnVuIHVudGVyc3VjaHQsIG9iIGlua29uZ3J1ZW50ZSBSZWl6ZSBkaWUgUmVha3Rpb25zemVpdCBzaWduaWZpa2FudCBiZWVpbmZsdXNzZW4uIEhpZXJ6dSB3ZXJkZW4gSHlwb3RoZXNlbnRlc3QgZ2VudXR6dC4NCg0KRGllIE51bGwtIHVuZCBHZWdlbmh5cG90aGVzZSBsYXV0ZW46IA0KDQoqKkg8c3ViPjA8L3N1Yj46IERpZSBpbmtvbmdydWVudGUgRsOkcmJ1bmcgZGVyIEJ1dHRvbnMgaGF0IGtlaW5lIEF1c3dpcmt1bmcgYXVmIGRpZSBSZWFrdGlvbnN6ZWl0LioqDQoNCioqSDxzdWI+MTwvc3ViPjogRGllIGlua29uZ3J1ZW50ZSBGw6RyYnVuZyBkZXIgQnV0dG9ucyBoYXQgZWluZSBBdXN3aXJrdW5nIGF1ZiBkaWUgUmVha3Rpb25zemVpdC4qKg0KDQpEYXMgU2lnbmlmaWthbnpuaXZlYXUgd2lyZCBhdWYgJFxhbHBoYSQgPSAwLjA1IGZlc3RnZWxlZ3QuDQoNCmBgYHtyIHNldHVwfQ0Kc291cmNlKCJzY3JpcHRzL3dpZGVfdG9fbG9uZy5SIikNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UpDQpgYGANCg0KYGBge3J9DQpkYXRhX29yaWdpbmFsIDwtIHJlYWRfY3N2KCJkYXRhL2RhdGFfb3JpZ2luYWwuY3N2IiwgDQogICAgY29sX3R5cGVzID0gY29scyhEYXR1bSA9IGNvbF9kYXRlKGZvcm1hdCA9ICIlZC4lbS4lWSIpLCANCiAgICAgICAgVWhyemVpdCA9IGNvbF90aW1lKGZvcm1hdCA9ICIlSDolTSIpLCANCiAgICAgICAgYFplaXQgZ2VzYW10YCA9IGNvbF90aW1lKGZvcm1hdCA9ICIlSDolTTolT1MiKSwgDQogICAgICAgIGBJc2hpaGFyYSBEYXVlcmAgPSBjb2xfdGltZShmb3JtYXQgPSAiJUg6JU06JVMiKSkpDQpgYGANCg0KYGBge3J9DQojIFJlbW92ZSB0cm9sbA0KZGF0YV9vcmlnaW5hbCA8LSBkYXRhX29yaWdpbmFsWy1jKDEwNyksIF0NCmBgYA0KDQpgYGB7cn0NCiMgUmVtb3ZlIGFsbCB3aXRoIHJlZC1ncmVlbi1ibGluZG5lc3MNCmRhdGFfb3JpZ2luYWwkYElzaGloYXJhIERhdWVyYCA8LSBmb3JtYXQoYXMuUE9TSVhjdChkYXRhX29yaWdpbmFsJCdJc2hpaGFyYSBEYXVlcicpLCAiJUg6JU06JU9TIikNCg0KZGZfbm9DQiA8LSBzdWJzZXQoZGF0YV9vcmlnaW5hbCwgZGF0YV9vcmlnaW5hbCRgSXNoaWhhcmEgNDJgID09IDQyICYgZGF0YV9vcmlnaW5hbCRgSXNoaWhhcmEgM2AgPT0gMyAmIGRhdGFfb3JpZ2luYWwkYElzaGloYXJhIExpbmllbmAgPT0gImtlaW5lIiAmIGRhdGFfb3JpZ2luYWwkYElzaGloYXJhIERhdWVyYCA8ICIwMDowMjowMCIpDQpgYGANCiMgVm9yYmVyZWl0dW5nIGRlcyBEYXRlbnNhdHplcw0KSW0gZm9sZ2VuZGVuIGlzdCBkZXIgRGF0ZW5zYXR6IHp1IHNlaGVuIG9obmUgUHJvYmFuZGVuLCBkaWUgZGVuIElzaGloYXJhLVRlc3QgbmljaHQgYmVzdGFuZGVuIGhhYmVuLiANCmBgYHtyfQ0KaGVhZChkZl9ub0NCKQ0KYGBgDQpVbSBkaWUgUmVha3Rpb25lbiBkZW4genVnZWjDtnJpZ2VuIFplaXRwdW5rdGVuIHp1b3JkbmVuIHp1IGvDtm5uZW4gdW5kIGRpZSBSZWFrdGlvbmVuIGdydXBwaWVyZW4genUga8O2bm5lbiwgd2lyZCBkaWUgVGFiZWxsZSB6dW7DpGNoc3Qgdm9tIHdlaXRlbiBGb3JtYXQgaW5zIGxhbmdlIEZvcm1hdCBnZWJyYWNodC4gRGFiZWkgd2VyZGVuIGRpZSBTcGFsdGVuIHZvbiAiRGF0dW0iIC0gIklzaGloYXJhIERhdWVyIiBlbnRmZXJudCwgZGEgSW5mb3JtYXRpb25lbiB3aWUgZGVtb2dyYXBoaXNjaGUgRGF0ZW4gbmljaHQgZ2VicmF1Y2h0IHdlcmRlbiwgdW0gZGllIFVudGVyc2NoaWVkZSB6d2lzY2hlbiBkZW4gUmVha3Rpb25lbiB6dSB1bnRlcnN1Y2hlbi4gRGFzIEVyZ2VibmlzIHNpZWh0IHdpZSBmb2xndCBhdXM6DQpgYGB7cn0NCmRmX2xvbmdfcmVhY3Rpb25zIDwtIGRmX25vQ0IgJT4lIHNlbGVjdCgtKCJEYXR1bSI6IklzaGloYXJhIERhdWVyIikpDQpkZl9sb25nX3JlYWN0aW9ucyA8LSB3aWRlVG9Mb25nVGFibGUoZGZfbG9uZ19yZWFjdGlvbnMpDQpkZl9sb25nX3JlYWN0aW9ucyRSZWFjdGlvbiA8LSBhcy5mYWN0b3IoZGZfbG9uZ19yZWFjdGlvbnMkUmVhY3Rpb24pDQpuYW1lcyhkZl9sb25nX3JlYWN0aW9ucylbbmFtZXMoZGZfbG9uZ19yZWFjdGlvbnMpID09ICJUaW1lIGluIG1zIl0gPC0gIlRpbWVfbXMiDQpkZl9sb25nX3JlYWN0aW9ucw0KYGBgDQpEaWUgU3BhbHRlICJUaW1lX21zIiB3aXJkIGFscyBCb3hwbG90IGdlcGxvdHRldCwgdW0gZGllIFZlcnRlaWx1bmcgZGVyIFJlYWt0aW9uc3plaXRlbiB6dSB2ZXJhbnNjaGF1bGljaGVuLg0KDQpgYGB7cn0NCmZpZyA8LSBwbG90X2x5KHR5cGUgPSAiYm94IikNCmZpZyA8LSBmaWcgJT4lIGFkZF90cmFjZSh5ID0gZGZfbG9uZ19yZWFjdGlvbnMkYFRpbWVfbXNgLCBuYW1lID0gImFsbGUgUmVha3Rpb25lbiIpDQpmaWcgPC0gZmlnICU+JSBsYXlvdXQodGl0bGU9IlZlcnRlaWx1bmcgZGVyIFJlYWt0aW9uc3plaXRlbiIsIHNob3dsZWdlbmQgPSBGQUxTRSkNCmZpZw0KYGBgDQpEZXIgQm94cGxvdCBpc3Qgc3RhcmsgZ2VzdGF1Y2h0LCBkYSBkaWUgUmVha3Rpb25zemVpdGVuIHZvbiA5OSBtcyBiaXMgNTY4NjAgbXMgcmVpY2hlbi4gRGVyIE1lZGlhbiBsaWVndCBiZWkgMjAyOSBtcywgd2VzaGFsYiBkYXZvbiBhdXN6dWdlaGVuIGlzdCwgZGFzcyBlcyBzaWNoIGJlaSBkZW4gQXXDn2VuLSB1bmQgRmVybnB1bmt0ZW4gdW0gQXVzcmVpw59lciBoYW5kZWx0LCB2b24gZGVuZW4gZWluaWdlIGF1Y2ggZXh0cmVtZSBBdXNyZWnDn2VyIHNpbmQuIEbDvHIgd2VpdGVyZSBBbmFseXNlbiBzb2xsdGVuIGRpZXNlIGF1c3NvcnRpZXJ0IHdlcmRlbi4NCg0KRGllIFdlcnRlIGRlcyBCb3hwbG90cyBub2NobWFsIGFscyBUYWJlbGxlOg0KYGBge3J9DQpzdW1tYXJ5KGRmX2xvbmdfcmVhY3Rpb25zJGBUaW1lX21zYCkNCmBgYA0KVW0gZGllIEF1c3JlacOfZXIgenUgaWRlbnRpZml6aWVyZW4sIHdpcmQgZGFzIHJzdGF0aXggUGFrZXQgdmVyd2VuZGV0LiANCmBgYHtyfQ0Kb3V0bGllcnMgPC0gZGZfbG9uZ19yZWFjdGlvbnMgJT4lDQogIGdyb3VwX2J5KFJlYWN0aW9uKSAlPiUNCiAgaWRlbnRpZnlfb3V0bGllcnMoVGltZV9tcykNCm91dGxpZXJzDQpgYGANClNpY2h0YmFyIHNpbmQgaW5zZ2VzYW10IDYyOCBBdXNyZWnDn2VyIHZvbiAxMDAwMCBNZXNzcHVua3Rlbi4NCg0KYGBge3J9DQpkZl9leHRyZW1lX291dGxpZXJzIDwtIHN1YnNldChvdXRsaWVycywgb3V0bGllcnMkaXMuZXh0cmVtZSA9PSBUUlVFKQ0KZGZfZXh0cmVtZV9vdXRsaWVycw0KYGBgDQpWb24gZGVuIDYyOCBBdXNyZWnDn2VybiBzaW5kIDIyNCBBdXNyZWnDn2VyIGV4dHJlbS5EaWUgZXh0cmVtZW4gQXVzcmVpw59lciB3ZXJkZW4gYXVzIGRlbSBEYXRlbnNhdHogZW50ZmVybnQuDQoNCmBgYHtyfQ0KZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lIDwtIGRmX2xvbmdfcmVhY3Rpb25zICU+JSBhbnRpX2pvaW4oZGZfZXh0cmVtZV9vdXRsaWVycywgYnkgPSBjKCJaIiwgIlRpbWVfbXMiLCAiUiIsICJSZWFjdGlvbiIpKQ0KZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lDQpgYGANClNvZGFzcyBub2NoIDk3NzYgTWVzc3B1bmt0ZSB2b24gMTAwMDAgdmVyYmxlaWJlbi4gTnVuIGlzdCBhdWNoIGRlciBCb3hwbG90IGVya2VubmJhci4NCg0KYGBge3J9DQpmaWcgPC0gcGxvdF9seSh0eXBlID0gImJveCIpDQpmaWcgPC0gZmlnICU+JSBhZGRfdHJhY2UoeSA9IGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZSRgVGltZV9tc2AsIG5hbWUgPSAiYWxsZSBSZWFrdGlvbmVuIikNCmZpZyA8LSBmaWcgJT4lIGxheW91dCh0aXRsZT0iVmVydGVpbHVuZyBkZXIgUmVha3Rpb25zemVpdGVuIiwgc2hvd2xlZ2VuZCA9IEZBTFNFKQ0KZmlnDQpgYGANClVuZCBkaWUgUmVha3Rpb25zemVpdGVuIGJlZmluZGVuIHNpY2ggamV0enQgendpc2NoZW4gOTkgbXMgdW5kIDYxMzYgbXMuIA0KDQpgYGB7cn0NCnN1bW1hcnkoZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lJGBUaW1lX21zYCkNCmBgYA0KTnVuIGthbm4gbWl0IGRlbiBIeXBvdGhlc2VudGVzdHMgYmVnb25uZW4gd2VyZGVuLg0KDQojIEFub3ZhLVRlc3QgZsO8ciBhbGxlDQoNClp1bsOkY2hzdCB3aXJkIHNpY2ggZWluIMOcYmVyYmxpY2sgZGVyIE1pdHRlbHdlcnRlIHVuZCBTdGFuZGFyZGFid2VpY2h1bmdlbiBkZXIgZWluemVsbmVuIFJlYWt0aW9uZW4gdmVyc2NoYWZmdC4NCg0KYGBge3J9DQphZ2cxIDwtIGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZSAlPiUNCiAgZ3JvdXBfYnkoUmVhY3Rpb24pICU+JQ0KICBnZXRfc3VtbWFyeV9zdGF0cyhUaW1lX21zLCB0eXBlID0gIm1lYW5fc2QiKQ0KDQphZ2cxDQpgYGANCkhpZXJiZWkgaXN0IHp1IHNlaGVuLCBkYXNzIHNpY2ggZGllIE1pdHRlbHdlcnRlIHp3aXNjaGVuIGRlbiBSZWFrdGlvbmVuIHVtIG1laHJlcmUgMTAwIG1zIHZvbmVpbmFuZGVyIHVudGVyc2NoZWlkZW4uIEF1Y2ggZGllIHp1Z2Vow7ZyaWdlbiBCb3hwbG90cyB6ZWlnZW4gZGllcyBhbjoNCg0KYGBge3J9DQpmaWcgPC0gcGxvdF9seShkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWUsIHggPSB+UmVhY3Rpb24sIHkgPSB+VGltZV9tcywgdHlwZT0iYm94IiwgY29sb3IgPSB+UmVhY3Rpb24pDQpmaWcgPC0gZmlnICU+JSBsYXlvdXQoc2hvd2xlZ2VuZCA9IEZBTFNFLCB4YXhpcyA9IGxpc3QodGl0bGUgPSAiUmVha3Rpb24iKSwgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlplaXQgaW4gbXMiKSkNCmZpZw0KYGBgDQpEaWUgTWVkaWFuZSBiZXdlZ2VuIHNpY2ggdm9uIDE1NTkgbXMgKFJlYWt0aW9uIDUpIHp1IDIxNDMgbXMgKFJlYWt0aW9uIDIpLiBOdW4gaXN0IHp1IHByw7xmZW4sIG9iIGRpZXNlIFVudGVyc2NoaWVkZSBzaWduaWZpa2FudCBzaW5kLiBEYWbDvHIgd2lyZCBkZXIgQU5PVkEtVGVzdCAoQW5hbHlzaXMgb2YgVmFyaWFuY2UgVGVzdCkgaGVyYW5nZXpvZ2VuLiBEaWVzZXIgdW50ZXJzdWNodCwgb2IgYmVpIGVpbmVyIFJlaWhlIHZvbiBNZXNzd2VydGVuLCBkaWUgaW4gMiBvZGVyIG1laHIgR3J1cHBlbiBlaW5nZXRlaWx0IHNpbmQsIGRpZSBNaXR0ZWx3ZXJ0ZSBkZXIgR3J1cHBlbiBzaWduaWZpa2F0IHZvbmVpbmFuZGVyIHVudGVyc2NoZWlkZW4sIHNvZGFzcyBlaW5lIEF1c3NhZ2UgZGFyw7xiZXIgZ2V0cm9mZmVuIHdlcmRlbiBrYW5uLCBvYiBkaWUgZWluemVsbmVuIEdydXBwZW4gZWluZSBBdXN3aXJrdW5nIGF1ZiBkaWUgTWVzc3dlcnRlIGhhYmVuLg0KDQojIyBWb3JiZWRpbmd1bmdlbiBwcsO8ZmVuDQoNClVtIGRlbiBBTk9WQS1UZXN0IGR1cmNoZsO8aHJlbiB6dSBrw7ZubmVuLCBtw7xzc2VuIDIgQmVkaW5ndW5nZW4gZXJmw7xsbHQgc2Vpbi4gWnVtIGVpbmVuIG3DvHNzZW4gZGllIERhdGVuIG5vcm1hbHZlcnRlaWx0IHNlaW4gdW5kIHp1bSBhbmRlcmVuIG3DvHNzZW4gc2llIGVpbmUgVmFyaWFuemhvbW9nZW5pdMOkdCBhdWZ3ZWlzZW4uIFp1ZXJzdCB3aXJkIGRpZSBOb3JtYWx2ZXJ0ZWlsdW5nIGRlciBSZWFrdGlvbnN6ZWl0ZW4gZ2VwcsO8ZnQuDQoNCiMjIyBQcsO8ZnVuZyBhdWYgTm9ybWFsdmVydGVpbHVuZw0KDQpEaWUgUHLDvGZ1bmcgYXVmIE5vcm1hbHZlcnRlaWx1bmcgd2lyZCBzb3dvaGwgdmlzdWVsbCwgYWxzIGF1Y2ggc3RhdGlzdGlzY2ggZHVyY2hnZWbDvGhydC4gWnVlcnN0IHdpcmQgZGVyIFF1YW50aWwtUXVhbnRpbC1QbG90IChRLVEtUGxvdCkgYmV0cmFjaHRldC4NCmBgYHtyfQ0KbW9kZWwgPC0gbG0oVGltZV9tcyB+IFJlYWN0aW9uLCBkYXRhID0gZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lKQ0KZ2dxcXBsb3QocmVzaWR1YWxzKG1vZGVsKSkNCmBgYA0KRGllIFdpbmtlbGhhbGJpZXJlbmRlIHN0ZWxsdCBkYWJlaSBkaWUgU3RhbmRhcmRub3JtYWx2ZXJ0ZWlsdW5nIGRhci4gRGllIHNjaHdhcnplbiBQdW5rdGUgc2luZCBkaWUgVmVydGVpbHVuZyBkZXMgRGF0ZW5zYXR6ZXMuIEplIG7DpGhlciBkaWUgUHVua3RlIGFuIGRlciBTdGFuZGFyZG5vcm1hbHZlcnRlaWx1bmcgc2luZCwgZGVzdG8gd2FocnNjaGVpbmxpY2hlciBpc3QgZWluZSBOb3JtYWx2ZXJ0ZWlsdW5nIGJlaW0gRGF0ZW5zYXR6Lg0KDQpXaXJkIGplZGUgUmVha3Rpb24gZWluemVsbiBnZXBsb3R0ZXQsIHNvIGlzdCBlcnNpY2h0bGljaCwgZGFzcyBSZWFrdGlvbmVuIHdpZSB6LkIuIDQgdW5kIDcgbsOkaGVyIGFuIGRlciBTdGFuZGFyZG5vcm1hbHZlcnRlaWx1bmcgc2luZCwgYWxzIGFuZGVyZSBSZWFrdGlvbmVuLg0KDQpgYGB7cn0NCmdncXFwbG90KGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZSwgIlRpbWVfbXMiLCBmYWNldC5ieSA9ICJSZWFjdGlvbiIpDQpgYGANClVtIGRpZSBOb3JtYWx2ZXJ0ZWlsdW5nIHN0YXRpc3Rpc2NoIHp1IHByw7xmZW4sIHdpcmQgZGVyIFNoYXBpcm8tV2lsay1UZXN0IGR1cmNoZ2Vmw7xocnQuIFIgbWVsZGV0IGJlaW0gRHVyY2hmw7xocmVuIGRlcyBTaGFwaXJvLVdpbGstVGVzdHMgZWluZW4gRmVobGVyLCB3ZW5uIGF1ZiBkaWUgTm9ybWFsdmVydGVpbHVuZyBhbGxlciBNZXNzd2VydGUgZ2V0ZXN0ZXQgd2lyZCwgZGEgbnVyIHp3aXNjaGVuIDMgdW5kIDUwMDAgV2VydGUgYXVmIE5vcm1hbGl0w6R0IGdlcHLDvGZ0IHdlcmRlbiBrw7ZubmVuLg0KDQpgYGB7cn0NCnNoYXBpcm9fdGVzdChyZXNpZHVhbHMobW9kZWwpKQ0KYGBgDQpEYWhlciB3aXJkIGRlciBTaGFwaXJvLVdpbGstVGVzdCBudXIgYXVmIGRpZSBlaW56ZWxuZW4gUmVha3Rpb25lbiBhbmdld2FuZHQsIGRhIGRpZXNlIEFuemFobGVuIHZvbiB1bnRlciA1MDAwIGJlc2l0emVuLg0KDQpgYGB7cn0NCmRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZSAlPiUNCiAgZ3JvdXBfYnkoUmVhY3Rpb24pICU+JQ0KICBzaGFwaXJvX3Rlc3QoVGltZV9tcykNCmBgYA0KQW5nZXdhbmR0IGF1ZiBkaWUgZWluemVsZW5lbiBSZWFrdGlvbmVuIGdpYnQgZGVyIFRlc3QgYW4sIGRhc3MgbGVkaWdsaWNoIFJlYWt0aW9uIDcgbm9ybWFsdmVydGVpbHQgaXN0LiBEaWVzIGlzdCBiZWkgMTAwIFByb2JhbmRlbiBhbGxlcmRpbmdzIHVud2FocnNjaGVpbmxpY2guIEdydW5kIGbDvHIgZGllc2VzIEVyZ2VibmlzIGlzdCBkaWUgRW1wZmluZGxpY2hrZWl0IGRlcyBTaGFwaXJvLVdpbGstVGVzdHMgYmVpIHNjaG9uIGtsZWluZW4gQWJ3ZWljaHVuZ2VuLiBBdWNoIGlzdCB6dSBiZWFjaHRlbiwgZGFzcyBkaWUgR3J1cHBlbiAxLCAyLCAzIHVuZCA4IGpld2VpbHMgw7xiZXIgMjAwMCBNZXNzd2VydGUgYmVzaXR6ZW4sIHfDpGhyZW5kIGRpZSBhbmRlcmVuIEdydXBwZW4gamV3ZWlscyB1bnRlciAxNTAgTWVzc3dlcnRlIGJlc2l0emVuLg0KDQpFaW5lIGFuZGVyZSBNZXRob2RlIGRpZSBOb3JtYWx2ZXJ0ZWlsdW5nIHZpc3VlbGwgenUgcHLDvGZlbiwgaXN0IGFuaGFuZCBlaW5lcyBIaXN0b2dyYW1tZXMuIERpZSBCYWxrZW4gc29sbHRlbiBkYWJlaSBtw7ZnbGljaHN0IGVpbmUgZ2F1w59zY2hlIEdsb2NrZW5rdXJ2ZSBiaWxkZW4uIEltIGZvbGdlbmRlbiBIaXN0b2dyYW1tIGlzdCBhbm7DpGhyZW5kIGVpbmUgc29sY2hlIEt1cnZlIHp1IHNlaGVuLiBBbGxlcmRpbmdzIGlzdCBzaWUgZXR3YXMgbmFjaCBsaW5rcyB2ZXJzY2hvYmVuIHVuZCBkaWUgQW56YWhsIGRlciBNZXNzd2VydGUgdW50ZXIgMTAwMCBtcyBzaW5kIGFicnVwdCBzZWhyIGdlcmluZy4NCmBgYHtyfQ0KaGlzdChkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWUkVGltZV9tcykNCmBgYA0KYGBge3J9DQpkZl9sb25nX3JlYWN0aW9uc19ub091dGxpZXJzIDwtIGRmX2xvbmdfcmVhY3Rpb25zICU+JSBhbnRpX2pvaW4ob3V0bGllcnMsIGJ5ID0gYygiWiIsICJUaW1lX21zIiwgIlIiLCAiUmVhY3Rpb24iKSkNCmBgYA0KSW0gbsOkY2hzdGVuIEhpc3RvZ3JhbW0gc2luZCBudW4gYWxsZSBBdXNyZWnDn2VyLCBkaWUgdm9uIGRlciBpZGVudGlmeS1vdXRsaWVycy1NZXRob2RlIGVya2FubnQgd29yZGVuIHNpbmQsIGVudGZlcm50IHdvcmRlbi4gRGllIFdlcnRlIHVudGVyIDEwMDAgbXMgc2luZCBhdWdlbnNjaGVpbmxpY2ggbmljaHQgYWxzIEF1c3JlacOfZXIgZXJrYW5udCB3b3JkZW4uIERlciBuaWVkcmlnc3RlIGdlbWVzc2VuZSBXZXJ0IGxpZWd0IGJlaSA5OSBtcywgd2VsY2hlIG5pY2h0IGFscyBBdXNyZWnDn2VyIGVya2FubnQgd3VyZGUuIEVpbmUgc28gc2NobmVsbGUgUmVha3Rpb24gaXN0IGFsbGVyZGluZ3MgbmljaHQgbcO2Z2xpY2gsIHdlc2hhbGIgZGllIFBlcnNvbiBpbiBkaWVzZW0gTW9tZW50IG3DtmdsaWNoZXJ3ZWlzZSB2ZXJzZWhlbnRsaWNoIHp3ZWltYWwgaGludGVyZWluYW5kZXIgYXVmIGRlbiBCdXR0b24gZ2VkcsO8Y2t0IGhhdCwgb2huZSB2b3JoZXIgbWVudGFsIHp1IGVudHNjaGVpZGVuLCBvYiBkaWUgQXVmZ2FiZSByaWNodGlnIG9kZXIgZmFsc2NoIGdlbMO2c3Qgd29yZGVuIGlzdC4NCg0KYGBge3J9DQpoaXN0KGRmX2xvbmdfcmVhY3Rpb25zX25vT3V0bGllcnMkVGltZV9tcykNCmBgYA0KDQoNCmBgYHtyfQ0KZGZfbG9uZ19yZWFjdGlvbnNfbm9PdXRsaWVyc18yIDwtIHN1YnNldChkZl9sb25nX3JlYWN0aW9uc19ub091dGxpZXJzLCBkZl9sb25nX3JlYWN0aW9uc19ub091dGxpZXJzJFRpbWVfbXMgPj0gNTAwKQ0KZGZfbG9uZ19yZWFjdGlvbnNfbm9PdXRsaWVyc18yIDwtIHN1YnNldChkZl9sb25nX3JlYWN0aW9uc19ub091dGxpZXJzXzIsIGRmX2xvbmdfcmVhY3Rpb25zX25vT3V0bGllcnNfMiRUaW1lX21zIDw9IDQwMDApDQpgYGANCg0KYGBge3J9DQpoaXN0KGRmX2xvbmdfcmVhY3Rpb25zX25vT3V0bGllcnNfMiRUaW1lX21zKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmRmX2xvbmdfcmVhY3Rpb25zX25vT3V0bGllcnMgJT4lDQogIGdyb3VwX2J5KFJlYWN0aW9uKSAlPiUNCiAgc2hhcGlyb190ZXN0KFRpbWVfbXMpDQpgYGANCiMjIyBQcsO8ZnVuZyBhdWYgVmFyaWFuemhvbW9nZW5pdMOkdA0KDQpEaWUgUHLDvGZ1bmcgZGVyIFZhcmlhbnpob21vZ2VuaXTDpHQgZXJmb2xndCBkdXJjaCBkZW4gTGV2ZW5lLVRlc3QuDQoNCmBgYHtyfQ0KZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lICU+JSBsZXZlbmVfdGVzdChUaW1lX21zIH4gUmVhY3Rpb24pDQpgYGANCkRhIGRlciBwLVdlcnQga2xlaW5lciBhbHMgMCwwNSBpc3QsIHNpbmQgZGllIFVudGVyc2NoaWVkZSBpbiBkZW4gVmFyaWFuemVuIHNpZ25pa2FudC4gRGFoZXIgaXN0IGRlciBMZXZlbmUtVGVzdCBmZWhsZ2VzY2hsYWdlbiB1bmQgZGllIHp3ZWl0ZSBCZWRpbmd1bmcgZsO8ciBkZW4gQW5vdmEtVGVzdCBuaWNodCBlcmbDvGxsdC4gRWluIGZlaGxnZXNjaGxhZ2VuZXIgTGV2ZW5lLVRlc3Qga2FubiBkYXJhdWYgaGluZGV1dGVuLCBkYXNzIGJlaSBkZW4gTWVzc3VuZ2VuIGVpbiBGZWhsZXIgdW50ZXJsYXVmZW4gaXN0LiBJbiBkaWVzZW0gRXhwZXJpbWVudCBpc3QgZGFzIGR1cmNoIGRlbiBJbXBsZW1lbnRpZXJ1bmdzZmVobGVyIHRhdHPDpGNobGljaCBkZXIgRmFsbC4NCg0KYGBge3J9DQpwbG90KG1vZGVsLCAxKQ0KYGBgDQojIyBXZWxjaC1Bbm92YS1UZXN0DQoNClp3YXIgaXN0IGRpZSBWYXJpYW56aG9tb2dlbml0w6R0IGbDvHIgZGVuIEFub3ZhLVRlc3QgbmljaHQgZ2VnZWJlbiwgYWxsZXJkaW5ncyBsw6Rzc3Qgc2ljaCB0cm90emRlbSBub2NoIHVudGVyc3VjaGVuLCB3aWUgc2lnbmlmaWthbnQgZGllIFVudGVyc2NoaWVkZSB6d2lzY2hlbiBkZW4gUmVha3Rpb25lbiBzaW5kLiBEYXMgaXN0IG1pdCBkZW0gV2VsY2gtQW5vdmEtVGVzdCBtw7ZnbGljaCwgd2VsY2hlIG51ciBlaW5lIE5vcm1hbHZlcnRlaWx1bmcgZm9yZGVydCB1bmQgcm9ib3N0IGdlZ2Vuw7xiZXIgVmFyaWFuemhldGVyb2dlbml0w6R0IGlzdC4gRGFkdXJjaCBoYXQgZXIgYWxsZXJkaW5ncyB3ZW5pZ2VyIEF1c3NhZ2VrcmFmdCBhbHMgZGVyIEFub3ZhLVRlc3QuDQoNCmBgYHtyfQ0KcmVzX2FvdiA8LSBkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWUgJT4lIHdlbGNoX2Fub3ZhX3Rlc3QoVGltZV9tcyB+IFJlYWN0aW9uKQ0KcmVzX2Fvdg0KYGBgDQoNCkRlciBwLVdlcnQgZsO8ciBkZW4gV2VsY2gtQW5vdmEtVGVzdCBpc3Qga2xlaW5lciBhbHMgMCwwNSB1bmQgZGFoZXIgaXN0IGRhdm9uIGF1c3p1Z2VoZW4sIGRhc3MgZGllIFVudGVyc2NoaWVkZSB6d2lzY2hlbiBkZW4gUmVha3Rpb25lbiBzaWduaWZpa2FudCBzaW5kLiBELmguIGRhc3MgZGllIE51bGxoeXBvdGhlc2UgdmVyd29yZmVuIHdpcmQgdW5kIGRpZSBHZWdlbmh5cG90aGVzZSBhbmdlbm9tbWVuIHdpcmQuDQoNCiMjIFBvc3Rob2MtQW5hbHlzZQ0KDQpEYSBkZXIgV2VsY2gtQW5vdmEgZXJmb2xncmVpY2ggd2FyLCB3aXJkIGVpbmUgUG9zdGhvYy1BbmFseXNlIGR1cmNoZ2Vmw7xocnQsIHVtIGhlcmF1c3p1ZmluZGVuLCB3aWUgc2lnbmlmaWthbnQgZGllIFVudGVyc2NoaWVkZSB1bnRlciBhbGxlbiBtw7ZnbGljaGVuIHBhYXJ3ZWlzZW4gS29tYmluYXRpb25lbiB2b24gUmVha3Rpb25lbiBzaW5kLg0KDQpgYGB7cn0NCnB3YyA8LSBkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWUgJT4lIGdhbWVzX2hvd2VsbF90ZXN0KFRpbWVfbXMgfiBSZWFjdGlvbikNCnB3Yw0KYGBgDQpXaWUgaW4gZGVyIFNwYWx0ZSAicC5hZGouc2lnbmlmIiB6dSBzZWhlbiBpc3QsIGdpYnQgZXMgendpc2NoZW4gdmllbGVuIFBhYXJlbiBzaWduaWZpa2FudGUgVW50ZXJzY2hpZWRlLiBKZSBtZWhyIFN0ZXJuZSBkZW0gUGFhciB6dWdlb3JkbmVydCB3ZXJkZW4sIGRlc3RvIGjDtmhlciBpc3QgZGllIFNpZ25pZmlrYW56LiAibnMiIGRhZ2VnZW4gYmVkZXV0ZXQsIGRhc3MgZGVyIFVudGVyc2NoaWVkIHp3aXNjaGVuIGRlbSBQYWFyIG5pY2h0IHNpZ25pZmlrYW50IGlzdC4NCg0KRGVyIHBhYXJ3ZWlzZSBWZXJnbGVpY2ggbMOkc3N0IHNpY2ggYXVjaCB2aXN1ZWxsIGRhcnN0ZWxsZW46DQoNCmBgYHtyfQ0KcHdjX3Bsb3QgPC0gcHdjICU+JSBhZGRfeHlfcG9zaXRpb24oeCA9ICJSZWFjdGlvbiIsIHN0ZXAuaW5jcmVhc2UgPSAxKQ0KZ2dib3hwbG90KGRmX2xvbmdfcmVhY3Rpb25zX25vT3V0bGllcnMsIHggPSAiUmVhY3Rpb24iLCB5ID0gIlRpbWVfbXMiKSArDQogIHN0YXRfcHZhbHVlX21hbnVhbChwd2NfcGxvdCwgaGlkZS5ucyA9IFRSVUUpICsNCiAgbGFicygNCiAgICBzdWJ0aXRsZSA9IGdldF90ZXN0X2xhYmVsKHJlc19hb3YpLA0KICAgIGNhcHRpb24gPSBnZXRfcHdjX2xhYmVsKHB3YykNCiAgICApDQpgYGANCkRpZSBMaW5pZW4gw7xiZXIgZGVuIEJveHBsb3RzIHZlcmJpbmRlbiBkYWJlaSBkaWUgUmVha3Rpb25lbiBtaXQgc2lnbmlmaWthbnRlbiBVbnRlcnNjaGllZGVuLiBEaWUgU3Rlcm5lIMO8YmVyIGRlbiBMaW5pZW4gemVpZ2VuIGF1Y2ggZGllIGRpZSBTdMOkcmtlIGRlciBTaWduaWZrYW56IGFuLg0KDQpEYXMgRXJnZWJuaXMgZGVzIHBhYXJ3ZWlzZW4gVmVyZ2xlaWNocyBpc3QgZXR3YXMgw7xiZXJyYXNjaGVuZCwgZGEgZGllc2VyIGRpZSBIeXBvdGhlc2UsIGRhc3MgaW5rb25ncnVlbnRlIFJlaXplIGzDpG5nZXJlIFJlYWt0aW9uc3plaXRlbiB2ZXJ1cnNhY2hlbiBkb2NoIHdpZWRlciBpbiBGcmFnZSBzdGVsbGVuLiBTbyBpc3QgYmVpc3BpZWxzd2Vpc2UgenUgc2VoZW4sIGRhc3MgZXMgZWluZW4gc3RhcmtlbiBzaWduaWZpa2FudGVuIFVudGVyc2NoaWVkIHp3aXNjaGVuIFJlYWt0aW9uIDEgdW5kIDggZ2lidCwgb2J3b2hsIGVzIHNpY2ggaGllciB6d2VpbWFsIHVtIGtvbmdydWVudGUgUmVpemUgaGFuZGVsdC4gRGFzIGlua29uZ3J1ZW50ZSBHZWdlbnN0w7xjayB6dXIgOCBpc3QgZGllIFJlYWt0aW9uIDMuIFp3aXNjaGVuIDMgdW5kIDggZ2lidCBlcyB6d2FyIGF1Y2ggZWluZW4gc3RhcmtlbiBVbnRlcnNjaGllZCwgYWxsZXJkaW5ncyBoYXQgZGllIGtvbmdydWVudGUgUmVha3Rpb24gZWluZSBow7ZoZXJlIER1cnNjaG5pdHRzc3plaXQgYWxzIGRpZSBpbmtvbmdydWVudGUgUmVha3Rpb24uIA0KDQojIyBTY2hsdXNzZm9sZ2VydW5nDQpBdWZncnVuZCBkZXIgRXJnZWJuaXNzZSBrYW5uIHNpY2hlciBnZXNhZ3Qgd2VyZGVuLCBkYXNzIGRpZSBGYXJiZSBkZXIgQnV0dG9ucyBhdWYgamVkZW4gRmFsbCBlaW5lIEF1c3dpcmt1bmcgYXVmIGRpZSBSZWFrdGlvbnN6ZWl0IGhhdC4gRXMgaXN0IGplZG9jaCBuaWNodCBuYWNod2Vpc2JhciwgZGFzcyBkaWVzIGFuIGRlbiBpbmtvbmdydWVudGVuIFN0aW11bGkgbGllZ3QuDQoNCg0KIyBBbm92YS1UZXN0IGbDvHIgMTAwIHJpY2h0aWdlIEFudHdvcnRlbg0KDQpJbnNnZXNhbXQgNiBQcm9iYW5kZW4gaGFiZW4gc293b2hsIDEwMCBBdWZnYWJlbiByaWNodGlnIGdlbMO2c3QgYWxzIGF1Y2ggZGVuIElzaGloYXJhLVRlc3Qga29tcGxldHQgYmVzdGFuZGVuLiBEYSBzaWUgYWxzbyBrZWluZW4gRmVobGVyIGdlbWFjaHQgaGFiZW4sIGvDtm5uZW4gYWxsZSBSZWFrdGlvbmVuLCBkaWUgZsOkbHNjaGxpY2hlcndlaXNlIGRlciAyIHp1Z2VvcmRuZXJ0IHd1cmRlICh3YXMgZWluZSBmYWxzY2hlIFJlYWt0aW9uIGF1ZiBlaW5lIEF1ZmdhYmUgaXN0KSBkZXIgNiB6dWdlb3JkbmV0IHdlcmRlbi4gRGFtaXQgaXN0IHp3YXIgZWluIGtsZWluZXIsIGFiZXIgZGFmw7xyIGtvcnJla3RlciBEYXRlbnNhdHogdm9yaGFuZGVuLCBtaXQgZGVtIGF1Y2ggbm9jaG1hbCBkaWUgU2lnbmlmaWthbnogendpc2NoZW4gZGVuIFJlYWt0aW9uZW4gdW50ZXJzdWNodCB3aXJkLg0KDQpgYGB7cn0NCmRmXzEwMCA8LSBzdWJzZXQoZGZfbm9DQiwgZGZfbm9DQiRSaWNodGlnID09IDEwMCkNCmBgYA0KDQpEaWUgRGF0ZW4gZGVyIDYgUHJvYmFuZGVuIHdpcmQgYXVmIGRpZXNzZWxiZSBXZWlzZSB2b3JiZXJlaXRldCwgd2llIG9iZW4gYXVjaCBzY2hvbi4NCmBgYHtyfQ0KZGZfbG9uZ19yZWFjdGlvbnNfMTAwIDwtIGRmXzEwMCAlPiUgc2VsZWN0KC0oIkRhdHVtIjoiSXNoaWhhcmEgRGF1ZXIiKSkNCmRmX2xvbmdfcmVhY3Rpb25zXzEwMCA8LSB3aWRlVG9Mb25nVGFibGUoZGZfbG9uZ19yZWFjdGlvbnNfMTAwKQ0KbmFtZXMoZGZfbG9uZ19yZWFjdGlvbnNfMTAwKVtuYW1lcyhkZl9sb25nX3JlYWN0aW9uc18xMDApID09ICJUaW1lIGluIG1zIl0gPC0gIlRpbWVfbXMiDQpkZl9sb25nX3JlYWN0aW9uc18xMDBbZGZfbG9uZ19yZWFjdGlvbnNfMTAwID09IDJdIDwtIDYgDQpkZl9sb25nX3JlYWN0aW9uc18xMDAkUmVhY3Rpb24gPC0gYXMuZmFjdG9yKGRmX2xvbmdfcmVhY3Rpb25zXzEwMCRSZWFjdGlvbikNCmRmX2xvbmdfcmVhY3Rpb25zXzEwMA0KYGBgDQpEYW1pdCBzaW5kIDYwMCBNZXNzd2VydGUgdm9yaGFuZGVuLiBBdWNoIGhpZXIgd2VyZGVuIHZvciBkZXIgQW5hbHlzZSBkaWUgQXVzcmVpw59lciBlbnRmZXJudC4gDQoNCkluc2dlc2FtdCBzaW5kIDMyIEF1c3JlacOfZXIgdm9yaGFuZGVuLg0KDQpgYGB7cn0NCm91dGxpZXJzXzEwMCA8LSBkZl9sb25nX3JlYWN0aW9uc18xMDAgJT4lDQogIGdyb3VwX2J5KFJlYWN0aW9uKSAlPiUNCiAgaWRlbnRpZnlfb3V0bGllcnMoVGltZV9tcykNCm91dGxpZXJzXzEwMA0KYGBgDQpBdXNzb3J0aWVydCB3ZXJkZW4gZGllIDcgZXh0cmVtZW4gQXVzcmVpw59lci4NCg0KYGBge3J9DQpkZl9leHRyZW1lX291dGxpZXJzXzEwMCA8LSBzdWJzZXQob3V0bGllcnNfMTAwLCBvdXRsaWVyc18xMDAkaXMuZXh0cmVtZSA9PSBUUlVFKQ0KZGZfZXh0cmVtZV9vdXRsaWVyc18xMDANCmBgYA0KRGFtaXQgdmVyYmxlaWJlbiBub2NoIDU5MyBNZXNzd2VydGUuDQoNCmBgYHtyfQ0KZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lXzEwMCA8LSBkZl9sb25nX3JlYWN0aW9uc18xMDAgJT4lIGFudGlfam9pbihkZl9leHRyZW1lX291dGxpZXJzXzEwMCwgYnkgPSBjKCJaIiwgIlRpbWVfbXMiLCAiUiIsICJSZWFjdGlvbiIpKQ0KZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lXzEwMA0KYGBgDQpEYXMgenVnZWjDtnJpZ2UgQm94cGxvdCB6ZWlndCBkaWUgVmVydGVpbHVuZyBkZXIgTWVzc3dlcnRlIGFuLg0KDQpgYGB7cn0NCmZpZyA8LSBwbG90X2x5KHR5cGUgPSAiYm94IikNCmZpZyA8LSBmaWcgJT4lIGFkZF90cmFjZSh5ID0gZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lXzEwMCRUaW1lX21zKQ0KZmlnDQpgYGANCkRpZSBUYWJlbGxlIHplaWd0IGRpZSBFcmdlYm5pc3NlIHdpZWRlcnJ1bSBpbiBaYWhsZW4gYW4uDQoNCmBgYHtyfQ0Kc3VtbWFyeShkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWVfMTAwJGBUaW1lX21zYCkNCmBgYA0KQXVmZsOkbGxpZyBpc3QsIGRhc3MgZGVyIE1lZGlhbiB1bSAxOTcgbXMgaMO2aGVyIGxpZWd0LCBhbHMgYmVpIGRlciBHZXNhbXRncnVwcGUuDQoNCmBgYHtyfQ0KbmFtZXMoZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lXzEwMClbbmFtZXMoZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lXzEwMCkgPT0gIlRpbWUgaW4gbXMiXSA8LSAiVGltZV9tcyINCg0KYWdnXzEwMCA8LSBkZl9sb25nX3JlYWN0aW9uc18xMDAgJT4lDQogIGdyb3VwX2J5KFJlYWN0aW9uKSAlPiUNCiAgZ2V0X3N1bW1hcnlfc3RhdHMoVGltZV9tcywgdHlwZSA9ICJtZWFuX3NkIikNCg0KYWdnXzEwMA0KYGBgDQpBdWNoIGJlaSBkZW4gTWl0dGVsd2VydGVuIHNpbmQgaMO2aGVyZSBSZWFrdGlvbnN6ZWl0ZW4genUgc2VoZW4uDQoNCmBgYHtyfQ0KZmlnIDwtIHBsb3RfbHkoZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lXzEwMCwgeCA9IH5SZWFjdGlvbiwgeSA9IH5UaW1lX21zLCB0eXBlPSJib3giLCBjb2xvciA9IH5SZWFjdGlvbikNCmZpZyA8LSBmaWcgJT4lIGxheW91dChzaG93bGVnZW5kID0gRkFMU0UsIHhheGlzID0gbGlzdCh0aXRsZSA9ICJSZWFrdGlvbiIpLCB5YXhpcyA9IGxpc3QodGl0bGUgPSAiWmVpdCBpbiBtcyIpKQ0KZmlnDQpgYGANCg0KYGBge3J9DQpzdW1tYXJ5KGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDAkVGltZV9tcykNCmBgYA0KRWluZSBOb3JtYWx2ZXJ0ZWlsdW5nIGlzdCBnZWdlYmVuLg0KDQpgYGB7cn0NCm1vZGVsXzEwMCA8LSBsbShUaW1lX21zIH4gUmVhY3Rpb24sIGRhdGEgPSBkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWVfMTAwKQ0KZ2dxcXBsb3QocmVzaWR1YWxzKG1vZGVsXzEwMCkpDQpgYGANCg0KYGBge3J9DQpnZ3FxcGxvdChkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWVfMTAwLCAiVGltZV9tcyIsIGZhY2V0LmJ5ID0gIlJlYWN0aW9uIikNCmBgYA0KDQpEZXIgTGV2ZW5lLVRlc3QgaXN0IGVyZm9sZ3JlaWNoLCBkYSBwID4gMCwwNSBpc3QuDQoNCmBgYHtyfQ0KZGZfbG9uZ19yZWFjdGlvbnNfbm9FeHRyZW1lXzEwMCAlPiUgbGV2ZW5lX3Rlc3QoVGltZV9tcyB+IFJlYWN0aW9uKQ0KYGBgDQoNCkRhaGVyIHdpcmQgZGVyIEFub3ZhLVRlc3QgZHVyY2hnZWbDvGhydC4NCg0KYGBge3J9DQpyZXNfYW92XzEwMCA8LSBkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWVfMTAwICU+JSBhbm92YV90ZXN0KFRpbWVfbXMgfiBSZWFjdGlvbikNCnJlc19hb3ZfMTAwDQpgYGANCk1pdCBwIDwgMCwwNSBpc3QgZGVyIEFub3ZhLVRlc3QgZXJmb2xncmVpY2gsIGRhaGVyIGJlc3RlaGVuIHNpZ25pZmlrYW50ZSBVbnRlcnNjaGllZGUgendpc2NoZW4gZGVuIEdydXBwZW4uDQoNCkVzIGZvbGd0IGRpZSBQb3N0LWhvYyBBbmFseXNlLCB3ZWxjaGUgZGFzIEVyZ2VibmlzIHZvbiB2b3JoaW4gYmVzdMOkdGlndDogZXMgYmVzdGVoZW4gc2lnbmlmaWthbnRlIFVudGVyc2NoaWVkZSB6d3NpY2hlbiBSZWFrdGlvbiAxIHVuZCA4IHNvd2llIHp3aXNjaGVuIFJlYWt0aW9uIDMgdW5kIDguDQoNCmBgYHtyfQ0KcHdjXzEwMCA8LSBkZl9sb25nX3JlYWN0aW9uc19ub0V4dHJlbWVfMTAwICU+JSB0dWtleV9oc2QoVGltZV9tcyB+IFJlYWN0aW9uKQ0KcHdjXzEwMA0KYGBgDQoNCg0KDQpgYGB7cn0NCnB3Y19wbG90XzEwMCA8LSBwd2NfMTAwICU+JSBhZGRfeHlfcG9zaXRpb24oeCA9ICJSZWFjdGlvbiIsIHN0ZXAuaW5jcmVhc2UgPSAxKQ0KZ2dib3hwbG90KGRmX2xvbmdfcmVhY3Rpb25zX25vRXh0cmVtZV8xMDAsIHggPSAiUmVhY3Rpb24iLCB5ID0gIlRpbWVfbXMiKSArDQogIHN0YXRfcHZhbHVlX21hbnVhbChwd2NfcGxvdF8xMDAsIGhpZGUubnMgPSBUUlVFKSArDQogIGxhYnMoDQogICAgc3VidGl0bGUgPSBnZXRfdGVzdF9sYWJlbChyZXNfYW92XzEwMCksDQogICAgY2FwdGlvbiA9IGdldF9wd2NfbGFiZWwocHdjXzEwMCkNCiAgICApDQpgYGANCkRpZXNlcyBFcmdlYm5pcyBpc3QgbcO2Z2xpY2hlcndlaXNlIGVpbiBIaW53ZWlzIGRhcmF1ZiwgZGFzcyBkZXIgQXVmYmF1IGRlcyBFeHBlcmltZW50cyBuaWNodCBnZWVpZ25ldCBpc3QsIHVtIGhlcmF1c3p1ZmluZGVuLCBvYiBkaWUgUmVha3Rpb25zemVpdCBkdXJjaCBpbmtvbmdydWVudGVuIFN0aW11bGkgYmVlaW5mbHVzc3Qgd2lyZC4=